# 导入必要的库
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.metrics import accuracy_score, classification_report
import matplotlib.pyplot as plt

# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data  # 特征数据
y = iris.target  # 目标标签

# 划分训练集和测试集（70%训练，30%测试）
X_train, X_test, y_train, y_test = train_test_split(
    X, y, 
    test_size=0.3, 
    random_state=42  # 随机种子保证结果可复现
)

# 创建决策树分类器实例
# 使用默认参数（基尼不纯度作为分裂标准，不限制最大深度）

clf = DecisionTreeClassifier(random_state=42)

# 训练模型
clf.fit(X_train, y_train)

# 使用训练好的模型进行预测
y_pred = clf.predict(X_test)

# 评估模型性能
print("模型准确率: {:.2f}%".format(accuracy_score(y_test, y_pred) * 100))
print("\n分类性能报告:")
print(classification_report(y_test, y_pred, target_names=iris.target_names))

# 可视化决策树
plt.figure(figsize=(20, 10))  # 设置画布大小
plot_tree(
    clf,
    feature_names=iris.feature_names,  # 特征名称
    class_names=iris.target_names,     # 类别名称
    filled=True,                       # 颜色填充
    rounded=True,                     # 圆角节点
    fontsize=12                       # 字体大小
)
plt.title("鸢尾花分类决策树", fontsize=16)
plt.show()